% -*- coding: utf-8 -*-
% !TEX program = lualatex
\documentclass[oneside]{book}

\input{manual.sty}
\CodeHigh{lite}
\setcounter{chapter}{4}

\begin{document}

% \chapter{Use Some Libraries}
\chapter{使用扩展库}

% \mywarning{本章}

% The \verb!tabularray! package emulates or fixes some commands in other packages.
% To avoid potential conflict, you need to enable them with \verb!\UseTblrLibrary! command.
 \verb!Tabularray! 宏包模仿或修改了其它宏包的一些命令，
为避免冲突，需要使用 \verb!\UseTblrLibrary! 载入这些扩展库。

\section{\texttt{amsmath}库}

如果在导言区使用了 \verb!\UseTblrLibrary{amsmath}! ，
则 \verb!tabularray! 会自动载入 \verb!amsmath! 宏包，
并定义 \verb!+array!, \verb!+matrix!, \verb!+bmatrix!,
\verb!+Bmatrix!, \verb!+pmatrix!, \verb!+vmatrix!,
\verb!+Vmatrix! 和 \verb!+cases! 环境。
其中，每一个环境都类似于不带 \verb!+! 前缀的环境，
但是就像 \verb!tblr!环境一样，使用 \verb!rowsep=2pt! 默认值。
除了\verb!+array!环境外，其余的每个环境都可以带一个可选项，
通过该可选项，可能为环境设置内部参数。

\begin{demo}
$\begin{pmatrix}
 \dfrac{2}{3} &  \dfrac{2}{3} &  \dfrac{1}{3} \\
 \dfrac{2}{3} & -\dfrac{1}{3} & -\dfrac{2}{3} \\
 \dfrac{1}{3} & -\dfrac{2}{3} &  \dfrac{2}{3} \\
\end{pmatrix}$
\end{demo}

\begin{demohigh}
$\begin{+pmatrix}[cells={r},row{2}={purple8}]
 \dfrac{2}{3} &  \dfrac{2}{3} &  \dfrac{1}{3} \\
 \dfrac{2}{3} & -\dfrac{1}{3} & -\dfrac{2}{3} \\
 \dfrac{1}{3} & -\dfrac{2}{3} &  \dfrac{2}{3} \\
\end{+pmatrix}$
\end{demohigh}

\begin{demo}
$f(x)=\begin{cases}
 0,            & x=1; \\
 \dfrac{1}{3}, & x=2; \\
 \dfrac{2}{3}, & x=3; \\
 1,            & x=4. \\
\end{cases}$
\end{demo}

\begin{demohigh}
$f(x)=\begin{+cases}
 0,            & x=1; \\
 \dfrac{1}{3}, & x=2; \\
 \dfrac{2}{3}, & x=3; \\
 1,            & x=4. \\
\end{+cases}$
\end{demohigh}

% \section{Library \texttt{booktabs}}
\section{\texttt{booktabs}库}

% When you write \verb!\UseTblrLibrary{booktabs}!,
% \verb!tabularray! package will define commands \verb!\toprule!, \verb!\midrule!,
% \verb!\bottomrule! and \verb!\cmidrule! inside \verb!tblr! environment.
在导言区使用了 \verb!\UseTblrLibrary{booktabs}!后，
\verb!Tabularray!宏包则会自动载入\verb!booktabs!宏包，
并且定义 \verb!\toprule!、 \verb!\midrule!、
\verb!\bottomrule! 和 \verb!\cmidrule! 命令，
这些命令可以直接用于 \verb!tblr! 环境中。

\begin{demohigh}
\begin{tblr}{llll}
\toprule
 Alpha   & Beta  & Gamma   & Delta \\
\midrule
 Epsilon & Zeta  & Eta     & Theta \\
\cmidrule{1-3}
 Iota    & Kappa & Lambda  & Mu    \\
\cmidrule{2-4}
 Nu      & Xi    & Omicron & Pi    \\
\bottomrule
\end{tblr}
\end{demohigh}

类似于\verb!\hline!和\verb!\cline!命令，
可以通过这些命令的选项指定线宽与颜色。

\begin{demohigh}
\begin{tblr}{llll}
\toprule[2pt,purple3]
 Alpha   & Beta  & Gamma   & Delta \\
\midrule[blue3]
 Epsilon & Zeta  & Eta    & Theta \\
\cmidrule[azure3]{2-3}
 Iota    & Kappa & Lambda & Mu    \\
\bottomrule[2pt,purple3]
\end{tblr}
\end{demohigh}

如果需要更多的cmidrule，则可以使用\verb!\cmidrulemore!命令。

\begin{demohigh}
\begin{tblr}{llll}
\toprule
 Alpha   & Beta  & Gamma   & Delta \\
\cmidrule{1-3} \cmidrulemore{2-4}
 Epsilon & Zeta  & Eta     & Theta \\
\cmidrule{1-3} \morecmidrules \cmidrule{2-4}
 Iota    & Kappa & Lambda  & Mu    \\
\bottomrule
\end{tblr}
\end{demohigh}


从\verb!2021N!版后，\verb!\cmidrule!命令也支持
(\verb!l!, \verb!r!, \verb!lr!)裁剪选项。

\begin{demohigh}
\begin{tblr}{llll}
\toprule
 Alpha   & Beta  & Gamma   & Delta \\
\cmidrule[lr]{1-2} \cmidrule[lr=-0.4]{3-4}
 Epsilon & Zeta  & Eta     & Theta \\
\cmidrule[r]{1-2} \cmidrule[l]{3-4}
 Iota    & Kappa & Lambda  & Mu    \\
\bottomrule
\end{tblr}
\end{demohigh}

注意，需要将 \verb!l!, \verb!r! 或 \verb!lr! 选项置于
 \underline{\color{red3}方括号}内，
并且其取值为 \verb!-1! 和 \verb!0!之间的十进制数，
其中，\verb!-1! 表示裁剪整个 colsep，\verb!0! 表示不进行裁剪。
其默认值是 \verb!-0.8!，即与 \verb!booktabs! 宏包的结果类似。

同时，也提供了\verb!booktabs!环境。
在该环境中，将\verb!rowsep=0pt!设置为默认值，
但是，通过\verb!\toprule!、 \verb!\midrule!、 \verb!\bottomrule! 和 \verb!\cmidrule! 命令
添加了额外的垂直间距。
这些垂直间距由 \verb!\aboverulesep! 和 \verb!\belowrulesep! 的尺寸决定。

\begin{demohigh}
\begin{booktabs}{
  colspec = lcccc,
  cell{1}{1} = {r=2}{}, cell{1}{2,4} = {c=2}{},
}
\toprule
  Sample & I &   & II &   \\
\cmidrule[lr]{2-3} \cmidrule[lr]{4-5}
         & A & B & C & D \\
\midrule
  S1     & 5 & 6 & 7 & 8 \\
  S2     & 6 & 7 & 8 & 5 \\
  S3     & 7 & 8 & 5 & 6 \\
\bottomrule
\end{booktabs}
\end{demohigh}
% S4     & 8 & 5 & 6 & 7 \\


也可以使用 \verb!\specialrule! 命令指定表格横线。
其第2个参数用于设置与前一行的 \verb!belowsep! ，
其第3个参数用于设置当前行的 \verb!abovesep! 。

\begin{demohigh}
\begin{booktabs}{row{2}={olive9}}
\toprule
 Alpha   & Beta  & Gamma   & Delta \\
\specialrule{0.5pt}{4pt}{6pt}
 Epsilon & Zeta  & Eta     & Theta \\
\specialrule{0.8pt,blue3}{3pt}{2pt}
 Iota    & Kappa & Lambda  & Mu    \\
\bottomrule
\end{booktabs}
\end{demohigh}


最后是 \verb!\addlinespace! 命令，
可以通过其可选参数指定需要添加的垂直距离，
其默认值为 \verb!0.5em!。
该命令为前一行的 \verb!belowsep! 添加了一半行距，
并为当前行的 \verb!abovesep! 添加另一半行距。

\begin{demohigh}
\begin{booktabs}{row{2}={olive9}}
\toprule
 Alpha   & Beta  & Gamma   & Delta \\
\addlinespace
 Epsilon & Zeta  & Eta     & Theta \\
\addlinespace[1em]
 Iota    & Kappa & Lambda  & Mu    \\
\bottomrule
\end{booktabs}
\end{demohigh}

从2022A版开始，可以使用 \verb!longtabs! 环境排版\verb!booktabs! 长三线表，
使用 \verb!talltabs! 环境 \verb!booktabs! 可浮动长三线表。

\section{\texttt{counter}库}

% You need to load \verb!counter! library with \verb!\UseTblrLibrary{counter}!,
% if you want to modify some LaTeX counters inside \verb!tabularray! tables.
如需在\verb!tabularray!表格中修改部分计数器，
则需使用\verb!\UseTblrLibrary{counter}!载入\verb!counter!库。


\begin{demohigh}
\newcounter{mycnta}
\newcommand{\mycnta}{\stepcounter{mycnta}\arabic{mycnta}}
\begin{tblr}{hlines}
  \mycnta & \mycnta & \mycnta \\
  \mycnta & \mycnta & \mycnta \\
  \mycnta & \mycnta & \mycnta \\
\end{tblr}
\end{demohigh}

% \section{Library \texttt{diagbox}}
\section{ \texttt{diagbox}库}

% When writing \verb!\UseTblrLibrary{diagbox}! in the preamble of the document,
% \verb!tabularray! package loads \verb!diagbox! package,
% and you can use \verb!\diagbox! and \verb!\diagboxthree! commands inside \verb!tblr! environment.
当在导言区使用了\verb!\UseTblrLibrary{diagbox}!后，
\verb!Tabularray! 宏包会载入 \verb!diagbox! 宏包，
然后，就可以在\verb!tblr!环境中使用 \verb!\diagbox! 和\verb!\diagboxthree! 命令排版斜线表头。

\begin{demohigh}
\begin{tblr}{hlines,vlines}
 \diagbox{Aa}{Pp} & Beta & Gamma \\
 Epsilon & Zeta  & Eta \\
 Iota    & Kappa & Lambda \\
\end{tblr}
\end{demohigh}

\begin{demohigh}
\begin{tblr}{hlines,vlines}
 \diagboxthree{Aa}{Pp}{Hh} & Beta & Gamma \\
 Epsilon & Zeta  & Eta \\
 Iota    & Kappa & Lambda \\
\end{tblr}
\end{demohigh}

% You can also use \verb!\diagbox! and \verb!\diagboxthree! commands in math mode.
也可以在数学模式中使用 \verb!\diagbox!和 \verb!\diagboxthree! 命令。
\nopagebreak
\begin{demohigh}
$\begin{tblr}{|c|cc|}
\hline
 \diagbox{X_1}{X_2} & 0 & 1 \\
\hline
  0 & 0.1 & 0.2 \\
  1 & 0.3 & 0.4 \\
\hline
\end{tblr}$
\end{demohigh}

% \section{Library \texttt{siunitx}}
\section{ \texttt{siunitx}库}

% When writing \verb!\UseTblrLibrary{siunitx}! in the preamble of the document,
% \verb!tabularray! package loads \verb!siunitx! package,
% and defines \verb!S! column as \verb!Q! column with \verb!si! key.
当在导言区使用了\verb!\UseTblrLibrary{siunitx}!后，
\verb!Tabularray! 宏包会载入 \verb!siunitx! 宏包，
并定义了\verb!S!列格式，表示带有\verb!si!键的\verb!Q!列格式。

\begin{demohigh}
\begin{tblr}{
  hlines, vlines,
  colspec={S[table-format=3.2]S[table-format=3.2]},
}
 {{{Head}}} & {{{Head}}} \\
   111      &   111      \\
     2.1    &     2.2    \\
    33.11   &    33.22   \\
\end{tblr}
\end{demohigh}

\begin{demohigh}
\begin{tblr}{
  hlines, vlines,
  colspec={Q[si={table-format=3.2},c]Q[si={table-format=3.2},c]}
}
 {{{Head}}} & {{{Head}}} \\
   111      &   111      \\
     2.1    &     2.2    \\
    33.11   &    33.22   \\
\end{tblr}
\end{demohigh}

% Note that you need to use \underline{triple} pairs of braces to guard non-numeric cells.
注意，需要使用 \underline{\color{red3}三重} 大括号对以确保单元格是非数字模式。

% Also you must use \verb!l!, \verb!c! or \verb!r! to set horizontal alignment for non-numeric cells:
另外，也必须使用 \verb!l!、 \verb!c! 或 \verb!r! 设置非数字单元格的水平对齐方式。
\nopagebreak
\begin{demohigh}
\begin{tblr}{
  hlines, vlines, columns={6em},
  colspec={
    Q[si={table-format=3.2,table-number-alignment=left},l,blue7]
    Q[si={table-format=3.2,table-number-alignment=center},c,teal7]
    Q[si={table-format=3.2,table-number-alignment=right},r,purple7]
  }
}
 {{{Head}}} & {{{Head}}} & {{{Head}}} \\
   111      &   111      &   111      \\
     2.1    &     2.2    &     2.3    \\
    33.11   &    33.22   &    33.33   \\
\end{tblr}
\end{demohigh}

% Both \verb!S! and \verb!s! columns are supported. In fact, These two columns have been defined as follows:
此时，\verb!S! 和 \verb!s! 列格式都可用。
实质上，这两个列格式是按如下方式定义的：
\begin{codehigh}
\NewColumnType{S}[1][]{Q[si={#1},c]}
\NewColumnType{s}[1][]{Q[si={#1},c,cmd=\TblrUnit]}
\end{codehigh}

\section{\texttt{varwidth}库}

为了构建更好的表格，\verb!tabularray! 需要度量单元格的宽度。
默认情况下，它使用\verb!\hbox! 实现测量。
但当单元格中包含有诸如列表或行间公式等垂直结构的元素时，
则可能会产生错误。

通过在导言区使用 \verb!\UseTblrLibrary{varwidth}! ，
\verb!tabularray! 宏包会载入 \verb!varwidth! 宏包，
并会为表格添加 \verb!measure! 内部参数。
当设置了 \verb!measure=vbox! 后，则会使用 \verb!\vbox! 测量单元格宽度。

\begin{demohigh}
\begin{tblr}{hlines,measure=vbox}
  Text Text Text Text Text Text Text
  \begin{itemize}
    \item List List List List List List
    \item List List List List List List List
  \end{itemize}
  Text Text Text Text Text Text Text \\
\end{tblr}
\end{demohigh}

从2022A版开始，可以使用\verb!stretch=-1! 移除列表环境上下的间距，
下面的例子需要 \verb!enumitem! 宏包，并使用其 \verb!nosep! 选项:

{\centering\begin{tblr}{
  hlines,vlines,rowspec={Q[l,t]Q[l,b]},
  measure=vbox,stretch=-1,
}
  \begin{itemize}[nosep]
    \item List List List List List
    \item List List List List List List
  \end{itemize} & oooo \\
  \begin{itemize}[nosep]
    \item List List List List List
    \item List List List List List List
  \end{itemize} & gggg \\
\end{tblr}\par}

%% BUG: there is extra vertical space at the beginning of the first cell if I use demohigh
%\begin{demohigh}
\begin{codehigh}
\begin{tblr}{
  hlines,vlines,rowspec={Q[l,t]Q[l,b]},
  measure=vbox,stretch=-1,
}
  \begin{itemize}[nosep]
    \item List List List List List
    \item List List List List List List
  \end{itemize} & oooo \\
  \begin{itemize}[nosep]
    \item List List List List List
    \item List List List List List List
  \end{itemize} & gggg \\
\end{tblr}
\end{codehigh}
%\end{demohigh}

注意， \verb!stretch=-1! 选项也会移除单元格中的支架，
因此，对于使用了\verb!rowsep=0pt!的\verb!tabularray!环境，
其效果不会很好。
如\verb!booktabs!库中的\verb!booktabs!/\verb!longtabs!/\verb!talltabs! 环境。

\end{document}
